1. Field of the Invention
The present invention relates to initialising and maintaining a structure referencing data during execution of an application running on a computer.
2. Description of the Related Art
The speed and capacity of processing and data storage devices has gradually shifted the limits of application functionality from hardware to application instructions themselves.
The increasing complexity of many applications is such that it is no longer possible to consider a set of application instructions as ever being finished. Instead, the source code for these instructions evolves over time, and improves according to changing user requirements over a product lifetime spanning many years. Even in the shorter term, application instructions may change from day to day. In order to manage this constant evolution and minimise the problems arising from its inherent complexity, it is established good engineering practice for applications to comprise a large number of small sets of instructions or modules.
Individual teams of engineers can work on modules separately, and this enables parallel evolution of several aspects of an application's functionality. Theoretically, any complex application can be broken down into sufficiently small individual modules so that complexity, at the module level, never becomes a limiting factor. However, as the number of said modules increases, the problem of combining them to work together becomes more difficult. In the art, it is this problem which places an upper limit on the complexity of reliable application evolution.
A fundamental difficulty when combining modules in an application, is the initialisation of the data said modules provide a specific functionality for the processing thereof. A main application may comprise tens or even hundreds of said modules, and should any of said modules fail to initialise and/or process data generated by another of said modules, this may generate a corruption of the output data or even a main application crash.
The initialisation has to occur before the main application processing begins and, in the case of dynamically loaded modules known in the art as ‘plug-ins’, said initialisation often has to occur during said main application processing. In order to avoid this problem, engineers traditionally have to keep application complexity as low as possible, while still fulfilling the application requirements, and thus there exists a limit to the creativity with which engineers may devise new or improved modules for a main application.
A further problem encountered by individual teams of engineers is that they traditionally have to implement their expertise in an application by using the application's specific Application Programming Interface (API). The equipping of numerous different applications with the same specialist functionality can prove expensive and time-consuming, as said specialist functionality must be modified for implementation according to every different API.
In certain environments, such as video editing, application size and complexity cannot be avoided, and so it is possible for very significant and costly difficulties to occur, when attempting to process input data by means of said modules to generate an output, such as a video sequence or composite image.
A need therefore exists for allowing an application to benefit from a combination of modules developed under differing APIs without however compromising the overall functionality of said application due to the corruption of any of said modules' output.